/* The file is saved in UTF-8 codepage.
 * Check: «Stereotype», Section mark-§, Copyright-©, Alpha-α, Beta-β, Smile-☺
 */
package cz.pecinovsky.english.lootp.záloha_do_budoucna;

/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */


////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ End of ignored starting test - place for imports +++++

import static java.lang.Math.*;


/*******************************************************************************
 * Třída Časování obsahuje několik statickým metod, které testují
 * zrnitost údajů systémových hodin a speed porcesoru.
 * Metody vypisují počet milisekund uplynuvších mezi dvěma tiky hodin
 * a současně také počet běhů cyklem mezi těmito tiky.
 * Většina provádí tento test opakovaně a tak názorně demonstruje
 * nerovnoměrnou speed zpracování programů.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class ZrnitostHodin
{
//== CONSTANT CLASS ATTRIBUTES =================================================
//== VARIABLE CLASS ATTRIBUTES =================================================
//== CONSTANT INSTANCE ATTRIBUTES ==============================================
//== VARIABLE INSTANCE ATTRIBUTES ==============================================
//== CLASS GETTERS AND SETTERS =================================================
//== OSTATNÍ METODY TŘÍDY ======================================================

    /***************************************************************************
     * Sloučení obou předchozích testů do jediné metody.
     */
    public static void testHodinMilis()
    {
        int pokusů = 20;
        System.out.println("===== ZAČÁTEK TESTU S VNOŘENÝM CYKLEM =====");

        long minule = System.currentTimeMillis();

        System.out.print("\f");
        for (int pokus = 1;   pokus <= pokusů;   pokus++)
        {
            int  dotaz = 0;
            long nyní;

            do{
                dotaz++;
                nyní = System.currentTimeMillis();
            }while (nyní == minule);
            System.out.printf("Pokus %2d : tik %2d ms po %,7d. čtení%n",
                                pokus, (nyní-minule), dotaz);
            minule = nyní;
        }
        System.out.println("===== KONEC TESTU S VNOŘENÝM CYKLEM =====");
    }


    /***************************************************************************
     */
    public static void testHodinNano()
    {
         int pokusů = 20;
        System.out.println("===== ZAČÁTEK TESTU S VNOŘENÝM CYKLEM =====");

        long minule = System.currentTimeMillis();
        long system;

        for (int pokus = 1;   pokus <= pokusů;   pokus++)
        {
            int  dotaz = 0;
            long nyní;

            do{
                dotaz++;
                system = System.currentTimeMillis();
                nyní = System.nanoTime();
            }while (nyní == minule);
            System.out.printf("Pokus %2d : tik %,10d ns, " +
                "Přesně: %,15d ms, Nano: %,15d ns po %4.2f. čtení%n",
                pokus, (nyní-minule), system, nyní, (double)dotaz);
            minule = nyní;
        }
        System.out.println("===== KONEC TESTU S VNOŘENÝM CYKLEM =====");
    }

//##############################################################################
//== CONSTUCTORS AND FACTORY METHODS ===========================================
    private ZrnitostHodin() {}

//== INSTANCE GETTERS AND SETTERS ==============================================
//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================
//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================
//== PRIVATE AND AUXILIARY CLASS METHODS =======================================
//== PRIVATE AND AUXILIARY INSTANCE METHODS ====================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTING CLASSES AND METHODS ===============================================
//+ main
    /***************************************************************************
     * Test method.
     * -
     * @param args Parametry příkazového řádku se nepoužívají.
     */
    public static void main(String[] args)
    {
        System.out.printf("floor(3.5)  = %f\n", floor( 3.5));
        System.out.printf("ceil (3.5)  = %f\n", ceil(  3.5));
        System.out.printf("floor(-3.5) = %f\n", floor(-3.5));
        System.out.printf("ceil (-3.5) = %f\n", ceil( -3.5));
//        testHodinNano();
    }


//- main
}
